// noinspection JSUnresolvedReference /** * Field Google Map */ /* global jQuery, document, redux_change, redux, google */ (function ( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.google_maps = redux.field_objects.google_maps || {}; /* LIBRARY INIT */ redux.field_objects.google_maps.init = function ( selector ) { if ( ! selector ) { selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' ); } $( selector ).each( function ( i ) { let delayRender; const el = $( this ); let parent = el; if ( ! el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ':hidden' ) ) { return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // Check for delay render, which is useful for calling a map // render after JavaScript load. delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) ); // API Key button. redux.field_objects.google_maps.clickHandler( el ); // Init our maps. redux.field_objects.google_maps.initMap( el, i, delayRender ); } ); }; /* INIT MAP FUNCTION */ redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) { let delayed; let scrollWheel; let streetView; let mapType; let address; let defLat; let defLong; let defaultZoom; let mapOptions; let geocoder; let g_autoComplete; let g_LatLng; let g_map; let noLatLng = false; // Pull the map class. const mapClass = el.find( '.redux_framework_google_maps' ); const containerID = mapClass.attr( 'id' ); const autocomplete = containerID + '_autocomplete'; const canvas = containerID + '_map_canvas'; const canvasId = $( '#' + canvas ); const latitude = containerID + '_latitude'; const longitude = containerID + '_longitude'; // Add map index to data attr. // Why, say we want to use delay_render, // and want to init the map later on. // You'd need the index number in the // event of multiple map instances. // This allows one to retrieve it // later. $( mapClass ).attr( 'data-idx', idx ); if ( true === delayRender ) { return; } // Map has been rendered, no need to process again. if ( $( '#' + containerID ).hasClass( 'rendered' ) ) { return; } // If a map is set to delay render and has been initiated // from another scrip, add the 'render' class so rendering // does not occur. // It messes things up. delayed = Boolean( mapClass.data( 'delay-render' ) ); if ( true === delayed ) { mapClass.addClass( 'rendered' ); } // Create the autocomplete object, restricting the search // to geographical location types. g_autoComplete = await google.maps.importLibrary( 'places' ); g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} ); // Data bindings. scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) ); streetView = Boolean( mapClass.data( 'street-view' ) ); mapType = Boolean( mapClass.data( 'map-type' ) ); address = mapClass.data( 'address' ); address = decodeURIComponent( address ); address = address.trim(); // Set default Lat/lng. defLat = canvasId.data( 'default-lat' ); defLong = canvasId.data( 'default-long' ); defaultZoom = canvasId.data( 'default-zoom' ); // Eval whether to set maps based on lat/lng or address. if ( '' !== address ) { if ( '' === defLat || '' === defLong ) { noLatLng = true; } } else { noLatLng = false; } // Can't have empty values, or the map API will complain. // Set default for the middle of the United States. defLat = defLat ? defLat : 39.11676722061108; defLong = defLong ? defLong : -100.47761000000003; if ( noLatLng ) { // If displaying a map based on an address. geocoder = new google.maps.Geocoder(); // Set up Geocode and pass address. geocoder.geocode( {'address': address}, function ( results, status ) { let latitude; let longitude; // Function results. if ( status === google.maps.GeocoderStatus.OK ) { // A good address was passed. g_LatLng = results[0].geometry.location; // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); // Get and set lat/long data. latitude = el.find( '#' + containerID + '_latitude' ); latitude.val( results[0].geometry.location.lat() ); longitude = el.find( '#' + containerID + '_longitude' ); longitude.val( results[0].geometry.location.lng() ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } else { // No data found, alert the user. alert( 'Geocode was not successful for the following reason: ' + status ); } } ); } else { // If displaying map based on an lat/lng. g_LatLng = new google.maps.LatLng( defLat, defLong ); // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, // Start off far unless an item is selected, set by php. streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create the map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } }; redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) { let markerTooltip; let infoWindow; let g_marker; let geoAlert = mapClass.data( 'geo-alert' ); // Get HTML. const input = document.getElementById( autocomplete ); // Set objects into the map. g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input ); // Bind objects to the map. g_autoComplete = new google.maps.places.Autocomplete( input ); g_autoComplete.bindTo( 'bounds', g_map ); // Get the marker tooltip data. markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Create infoWindow. infoWindow = new google.maps.InfoWindow(); // Create marker. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), draggable: true, title: markerTooltip, animation: google.maps.Animation.DROP } ); geoAlert = decodeURIComponent( geoAlert ); // Place change. google.maps.event.addListener( g_autoComplete, 'place_changed', function () { let place; let address; let markerTooltip; infoWindow.close(); // Get place data. place = g_autoComplete.getPlace(); // Display alert if something went wrong. if ( ! place.geometry ) { window.alert( geoAlert ); return; } console.log( place.geometry.viewport ); // If the place has a geometry, then present it on a map. if ( place.geometry.viewport ) { g_map.fitBounds( place.geometry.viewport ); } else { g_map.setCenter( place.geometry.location ); g_map.setZoom( 17 ); // Why 17? Because it looks good. } markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Set the marker icon. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), title: markerTooltip, clickable: true, draggable: true, animation: google.maps.Animation.DROP } ); // Set marker position and display. g_marker.setPosition( place.geometry.location ); g_marker.setVisible( true ); // Form array of address components. address = ''; if ( place.address_components ) { address = [( place.address_components[0] && place.address_components[0].short_name || '' ), ( place.address_components[1] && place.address_components[1].short_name || '' ), ( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' ); } // Set the default marker info window with address data. infoWindow.setContent( '
' + place.name + '
' + address ); infoWindow.open( g_map, g_marker ); // Run Geolocation. redux.field_objects.google_maps.geoLocate( g_autoComplete ); // Fill in address inputs. redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete ); } ); // Marker drag. google.maps.event.addListener( g_marker, 'drag', function ( event ) { document.getElementById( latitude ).value = event.latLng.lat(); document.getElementById( longitude ).value = event.latLng.lng(); } ); // End marker drag. google.maps.event.addListener( g_marker, 'dragend', function () { redux_change( el.find( '.redux_framework_google_maps' ) ); } ); // Zoom Changed. g_map.addListener( 'zoom_changed', function () { el.find( '.google_m_zoom_input' ).val( g_map.getZoom() ); } ); // Marker Info Window. infoWindow = new google.maps.InfoWindow(); google.maps.event.addListener( g_marker, 'click', function () { const marker_info = containerID + '_marker_info'; const infoValue = document.getElementById( marker_info ).value; if ( '' !== infoValue ) { infoWindow.setContent( infoValue ); infoWindow.open( g_map, g_marker ); } } ); }; /* FILL IN ADDRESS FUNCTION */ redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) { // Set variables. const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' ); // What if someone only wants city, or state, ect... // gotta do it this way to check for the address! // Need to check each of the returned components to see what is returned. const componentForm = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' }; // Get the place details from the autocomplete object. const place = g_autoComplete.getPlace(); let component; let i; let addressType; let _d_addressType; let val; let len; document.getElementById( latitude ).value = place.geometry.location.lat(); document.getElementById( longitude ).value = place.geometry.location.lng(); for ( component in componentForm ) { if ( componentForm.hasOwnProperty( component ) ) { // Push in the dynamic form element ID again. component = containerID + '_' + component; // Assign to proper place. document.getElementById( component ).value = ''; document.getElementById( component ).disabled = false; } } // Get each component of the address from the place details // and fill the corresponding field on the form. len = place.address_components.length; for ( i = 0; i < len; i += 1 ) { addressType = place.address_components[i].types[0]; if ( componentForm[addressType] ) { // Push in the dynamic form element ID again. _d_addressType = containerID + '_' + addressType; // Get the original. val = place.address_components[i][componentForm[addressType]]; // Assign to proper place. document.getElementById( _d_addressType ).value = val; } } }; redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) { if ( navigator.geolocation ) { navigator.geolocation.getCurrentPosition( function ( position ) { const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude ); const circle = new google.maps.Circle( { center: geolocation, radius: position.coords.accuracy } ); g_autoComplete.setBounds( circle.getBounds() ); } ); } }; /* API BUTTON CLICK HANDLER */ redux.field_objects.google_maps.clickHandler = function ( el ) { // Find the API Key button and react on click. el.find( '.google_m_api_key_button' ).on( 'click', function () { // Find message wrapper. const wrapper = el.find( '.google_m_api_key_wrapper' ); if ( wrapper.is( ':visible' ) ) { // If the wrapper is visible, close it. wrapper.slideUp( 'fast', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } else { // If the wrapper is visible, open it. wrapper.slideDown( 'medium', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } } ); el.find( '.google_m_autocomplete' ).on( 'keypress', function ( e ) { if ( 13 === e.keyCode ) { e.preventDefault(); } } ); // Auto select autocomplete contents, // since Google doesn't do this inherently. el.find( '.google_m_autocomplete' ).on( 'click', function ( e ) { $( this ).trigger( 'focus' ); $( this ).trigger( 'select' ); e.preventDefault(); } ); }; } )( jQuery ); California Sober or Abstinence – Orchid Group
Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

An accomplished musician, an academic pursuing a Ph.D. in American Studies, and a sober trans person who writes about the importance of making sobriety spaces inclusive for all. Mark S. Gold, M.D., is a pioneering researcher, professor, and chairman of psychiatry at Yale, the University of Florida, and Washington University in St Louis. His theories have changed the field, stimulated additional research, and led to new understanding and treatments for opioid use disorders, cocaine use disorders, overeating, smoking, and depression. If you’re sober and interested in contributing, we’d love to hear from you.

Fit Recovery Blog

  • It’s focus is really on how to live and what you can do to make the most of your life every day.
  • They enable individuals to prioritize their recovery efforts, manage their time effectively, and develop vital life skills such as responsibility, planning, and self-control.
  • The term, Cali Sober, applied to recovery, has been adopted by those rejecting abstinence as the only path after an addiction overdose or treatment.
  • Please send us an e-mail if you have any suggestions or questions.
  • Designed to give you inspiration, hope and strength to live your best life.

When routines are stable, they also reinforce emotional balance by reducing feelings of uncertainty and stress. The Fix features a daily mix of breaking news, exclusive interviews, investigative reports, essays, and blogs on sober living, lifestyle, and cultural resources, as well as knowledge and wisdom from expert counsel. In addition to certification information, Sober House Directory provides state-by-state information for recovery resources.

How to Explore Top SOBER House Settings in Arizona

For recovery resources in Connecticut please visit the Connecticut Sober House Recovery Resources page for more information. By choosing a CTARR-certified sober living home, residents in Connecticut can trust that they are in a structured, high-quality environment designed to support lasting recovery. For those who identify as having an unhealthy relationship with a substance, the internet offers a myriad of blogs and sites aimed at sharing experiences, offering insight, and even lending a helping hand. Balancing treatment activities with self-care and social engagements prevents boredom and reduces the risk of emotional or environmental triggers that might lead to relapse.

  • Once the warm, fuzzy feeling after a glass of wine or a crisp dirty martini began to spread through my body, I craved more.
  • Discover practical coping methods for living with an alcoholic and build a healthier, supportive environment.
  • Our Massachusetts PHP programs typically last 6 hours each day, up to 6 days a week.
  • Get the latest information on addiction treatment and recovery.

It’s honest, raw, and a great reminder that you’re not on this path alone. At our addiction treatment center in Massachusetts, we offer personalized treatment plans that are tailored to each individual’s unique challenges. Our goal is to provide the best possible care and support for our clients, regardless of how long their time at our drug & alcohol rehab may be.

sober living blog

Not only did this give me some time to prepare myself, but spreading the word held me accountable and really encouraged me to stick with it. So when the clock struck midnight on January 1, 2024, I quit cold turkey and swapped the celebratory champagne for sparkling cider. Little did I know I had just made the greatest decision of my life. After a few intense benders, I’d stop drinking for a few weeks and instead focus on researching alcohol and its effects on the body. I watched dozens of YouTube videos telling me that alcohol is poison, but hearing that had no lasting impact on how I viewed drinking.

Vanderburgh Sober Living in Connecticut

sober living blog

Before working towards recovery, she drank in private, but she decided to document her recovery publicly for accountability. Her blog grew from there and now serves to encourage others on their path to sober living. Not only does she post her day-to-day experiences, thoughts, and feelings towards sober living, but also the coping mechanisms she uses to stay on the path. This achievement is a testament to the blog’s commitment to providing engaging, informative, and supportive content for individuals who are living a sober lifestyle or considering sobriety. The Sober Curator’s rise in the rankings reflects its increasing influence and popularity in the sober living community. Sober living homes in Connecticut play a crucial role in supporting individuals in recovery, but not all homes operate with the same level of quality and structure.

What are the biggest benefits or gifts of sobriety for you?

My sleep was terrible after just one or two glasses of wine, and when I drank like I used to, the hangovers were horrendous. Both of these factors led me to not treat the people in my life well—either while intoxicated or afterward. Unveil the far-reaching consequences of drug abuse, from health effects to social and legal implications. Explore “I loved getting high – why did I change?” Discover the journey to recovery and embracing a new life. Learn effective ways of talking to family about your addiction and rebuild trust for a healthier recovery journey.

And the lesson that continues to give every day is that no matter what’s in our cup, if it depletes us, it will always, to some degree, leave us feeling empty. They offer a beautiful window into how sobriety is about so much more than just quitting alcohol. It affects every part of us and every relationship in our lives.

Top 25 Recovery Bloggers – Check Them Out Today

Most come to ask for help after they have lost control over drugs or alcohol and have compromised their family, friends, life, health, or work in the process. Lovato’s hit song highlighted a new and alternative post-overdose and rehab treatment approach — moderated or California sobriety. I’ve maintained long-lasting, healthy relationships with friends and family, my career has always been stable, http://spabogema.ru/facials/neozhidannaya-pravda-o-brake-dvoyurodnyh-bratev-i-sester.html and I’ve consistently kept an active lifestyle. I reserved my drinking for the weekends and could easily decline a beverage when I wasn’t in the mood. Once the warm, fuzzy feeling after a glass of wine or a crisp dirty martini began to spread through my body, I craved more. Even if I only planned to have one drink on a night out, it wasn’t rare for me to have three or four (or even more) instead.

California sober is not medically recognized, lacking scientific evaluation regarding its efficacy or even safety for people with addictions. Many celebrities who successfully battled addictions chose complete sobriety. We proudly envision a platform that celebrates recovery and healthy living through the journey of sobriety and transformation and empowers individuals to maintain their newfound freedom. Through our Sober Soapbox social platform, podcast and recovery blog, we aim to reach people from all walks of life, sharing stories of triumph, resilience and hope.

Dawn Nickel and Taryn Strong are the incredible mother/daughter duo behind She Recovers. The She Recovers ladies encourage all pathways of recovery and warmly welcome women who are recovering in all areas of their lives. Sasha describes herself as a quote junkie, a lover of the Oxford comma, a whole-hearted INFP, and a believer in miracles that are beyond reasonable to most. Her goal in creating her blog was to help people recover themselves.

The Sober Curator, a blog dedicated to promoting a sober lifestyle, has seen a significant rise in its ranking among the top sober living blogs on the internet. According to a post from Feedspot, The Sober Curator ranked 13th in 2023 and has climbed to the 11th spot in 2024. Additionally, The Sober Curator has been named #3 in the Best Sober Magazine category. Kelly Junco AKA The Sober Senorita describes herself as a reformed party girl. She is an advocate for women in sobriety and believes that “sobriety is self-love.” Her articles are always personal, but they offer a wide variety of http://uqu-sa.net/special-makeup-effects-for-stage-and-screen/distinctions-of-ancestry useful tips on how to live a sober life. As moms, we face unique challenges that can be overwhelming.

Additional Resources

Sober since 1994, Gavin has taken his experiences and written about them in this blog. He writes about music that helped him on his path, his observations on sober life and recovery, and coming back from relapse. Also on this site is a sober living toolbox, which helps you select the techniques that will best serve you in your daily life. Creating a structured daily routine is essential for maintaining sobriety, especially during early recovery stages or transitions into sober living environments.

LEAVE A REPLYYour email address will not be published. Required fields are marked *Your Name

Design and Develop by Ovatheme